package com.tx.review.string_;



/**
 * StringTable
 * @author ：tx
 * @version:
 */
public class StringTableDemo {
    public static void main(String[] args) {
        //1、StringTable中已有
//        testStringTableExist();

//        2、StrinTable中没有,jdk7以上
//        testStringTableNotExistOfJdk7();

//        3、StringTable中没有，jdk6
        testStringTableNotExistOfJdk6();
    }

    private static void testStringTableNotExistOfJdk6() {
        //版本：jdk6
        String a = new String(new char[]{'a', 'b', 'c'});
        //此时StringTable中没有，就会把a复制一份，然后加到StringTable中，返回地址给c，但实际上a是没有加到StringTable中的
        String c = a.intern();
        //StringTable中已有，直接返回
        String b = "abc";

        System.out.println(a == b);
        System.out.println(c == b);

        /**
         * 结果：
         *      false
         *      true
         */
    }

    private static void testStringTableNotExistOfJdk7() {
        //版本：jdk7
        String a = new String(new char[]{'a', 'b', 'c'});
        //此时StringTable中没有，所以会把a加入进去，并且返回地址给c
        String c = a.intern();
        //StringTable中已有，直接返回
        String b = "abc";

        System.out.println(a == b);
        System.out.println(c == b);

        /**
         * 结果：
         *      true
         *      true
        */
    }

    private static void testStringTableExist() {
        String a = new String(new char[]{'a', 'b', 'c'});
        //此时abc已经在StringTable中了
        String b = "abc";

        //StringTable中已有值，就直接返回，所以a不会被加到StringTable中
        String c = a.intern();

        System.out.println(a == b);
        System.out.println(c == b);

        /**
         * 结果：
         *      false
         *      true
         */
    }
}
